www.gusucode.com > VC++ 人脸识别定位、眼睛、嘴巴和鼻识别-源码程序 > VC++ 人脸识别定位、眼睛、嘴巴和鼻识别-源码程序/code/人脸定位实例/HairFace.cpp
//Download by http://www.NewXing.com ////////////////////////////////////////////////////////////////////// // HairFace.cpp: 类CHairFace接口 ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "FaceDetect.h" #include "HairFace.h" ////////////////////////////////////////////////////////////////////// // 构造函数/析构函数 ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// // 构造函数 // 参数: source-原始数据 // width-图像宽度 // height-图像高度 ////////////////////////////////////////////////////////////////////// CHairFace::CHairFace(RGBQUAD ** source,int width,int height) { m_nWidth = width; m_nHeight= height; m_bBinaryOK = false; m_pSourceData = source; m_pBinaryArray = new BYTE*[height]; for(int i=0;i <height; i++) m_pBinaryArray[i] = new BYTE[width]; } ////////////////////////////////////////////////////////////////////// // 析构函数 ////////////////////////////////////////////////////////////////////// CHairFace::~CHairFace() { if(m_pBinaryArray!=NULL) { for(int i=0;i<m_nHeight;i++) if(m_pBinaryArray[i]!=NULL) delete m_pBinaryArray[i]; delete m_pBinaryArray; } } ////////////////////////////////////////////////////////////////////// // 标记脸和头发的位置 ////////////////////////////////////////////////////////////////////// void CHairFace::MarkHairFace() { int i,j; for(i=0;i<m_nHeight;i++) for(j=0;j<m_nWidth ;j++) { double r,g,Y,temp; temp = m_pSourceData[i][j].rgbGreen +m_pSourceData[i][j].rgbRed +m_pSourceData[i][j].rgbBlue; r = (double)m_pSourceData[i][j].rgbRed/temp; g = (double)m_pSourceData[i][j].rgbGreen/temp; Y = 0.30*m_pSourceData[i][j].rgbRed+0.59*m_pSourceData[i][j].rgbGreen +0.11*m_pSourceData[i][j].rgbBlue; if(g<0.398 && g > 0.246 && r<0.664 && r>0.333 && r>g && g>=0.5*(1-r)) { m_pBinaryArray[i][j] = 0; //脸的位置 } else if(Y<40) { m_pBinaryArray[i][j] = 1; //头发位置 } else { m_pBinaryArray[i][j] = 2; //什么也不是 } } m_bBinaryOK = true; }